package com.yanghui.controller.admin;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yanghui.annotation.SystemLog;
import com.yanghui.pojo.BlogType;
import com.yanghui.service.BlogTypeService;
import com.yanghui.utils.ConstantUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author YH
 */
@RequestMapping("/admin")
@Controller
public class BlogTypeControllerAdmin {

    @Resource(name = "blogTypeServiceImpl")
    BlogTypeService blogTypeService;


    /**
     * 删除博客类别
     * 注意：删除的博客类别下面不能有博客
     * 否则不能删除
     */
    @RequestMapping("/deleteBlogTypeById")
    @ResponseBody
    @SystemLog(description = ConstantUtil.BLOG_TYPE_DELETE, userType = ConstantUtil.USER_TYPE_ADMIN)
    public Map deleteBlogTypeById(@RequestParam("param") String Param,
                                  @RequestParam("id") Integer id) {
        Map<String,Object> map = new HashMap<>();
        int count = blogTypeService.deleteBlogTypeById(id);

        /** 添加成功 */
        if (count == 1) {
            map.put("status", 200);
        /** 要删除的博客类别下有博客，不能删除 */
        } else if (count == -1) {
            map.put("status", 550);
        } else {
            map.put("status", 500);
            map.put("msg", "服务器错误！");
        }

        return map;
    }

    /**
     * 添加博客类型
     * 注意：需要考虑新的博客类型名称
     * 是否和其他的博客类型名称重复！！！
     */
    @RequestMapping("/addBlogType")
    @ResponseBody
    @SystemLog(description = ConstantUtil.BLOG_TYPE_ADD, userType = ConstantUtil.USER_TYPE_ADMIN)
    public Map addBlogType(@RequestParam("param") String param,
                           BlogType blogType) {
        Map map = new HashMap();
        /** 表中受影响记录的行数 */
        int count = blogTypeService.addBlogType(blogType);

        /** 添加成功 */
        if (count == 1) {
            map.put("status", 200);
        /** 与某个博客类别重复了 */
        } else if (count == -1) {
            map.put("status", 550);
        } else {
            map.put("status", 500);
        }

        return map;
    }

    /**
     * 按照博客类型ID 修改 博客类型名称
     * 注意：需要考虑新的博客类型名称
     * 是否和其他的博客类型名称重复！！！
     */
    @RequestMapping("/updateBlogTypeById")
    @ResponseBody
    @SystemLog(description = ConstantUtil.BLOG_TYPE_UPDATE, userType = ConstantUtil.USER_TYPE_ADMIN)
    public Map updateBlogTypeById(@RequestParam("param") String param,
                                  BlogType blogType) {
        Map map = new HashMap();
        /** 表示受影响记录行数 */
        int count = blogTypeService.updateBlogTypeById(blogType);

        /** 说明更新成功 */
        if (count == 1) {
            map.put("status", 200);
        /** 说明要更新的博客类型名称和其他的博客类型名称已经重复了 */
        } else if (count == -1) {
            map.put("status", 550);
            map.put("msg", "请重新操作");
        } else {
            map.put("status", 500);
            map.put("msg", "请重新操作");
        }

        return map;
    }

    /**
     * 按照博客类别ID 查询博客类别
     */
    @RequestMapping("/selectBlogTypeById")
    @ResponseBody
    public Map<String,Object> selectBlogTypeById(@RequestParam("id") Integer id) {
        Map<String,Object> map = new HashMap<>();
        System.out.println(id);
        BlogType blogType = blogTypeService.selectBlogTypeById(id);
        /** 如果有对应的博客类别，就说明查询成功，并且 blogType 不为空，反之为空 */
        if (blogType != null) {
            map.put("status", 200);
        } else {
            map.put("status", 500);
        }
        System.out.println(blogType);
        map.put("blogType", blogType);

        return map;
    }


    /**
     * 根据页面传来的条件来查询博客类别
     * 使用 PageHelper 实现分页功能
     */

    @RequestMapping("/selectBlogTypeListByPage")
    @ResponseBody
    public Map<String,Object> selectBlogTypeListByPage(
            BlogType blogType,
            @RequestParam(value = "page", required = true, defaultValue = "1") Integer page,
            @RequestParam(value = "pageSize", required = true, defaultValue = "10") Integer pageSize
    ) {
        Map<String,Object> map = new HashMap<>();
        /** 如果是带条件的查询，把条件存入到 map 中 */
        if (blogType.getTypeName() != null && blogType.getTypeName().equals("") != true) {
            map.put("typeName", blogType.getTypeName());
        }
        if (blogType.getAddTime() != null && blogType.getAddTime().equals("") != true) {
            map.put("addTime", blogType.getAddTime());
        }

        /** 调用PageHelper插件进行分页 */
        PageHelper.startPage(page, pageSize);
        List<BlogType> blogTypeList = blogTypeService.selectBLogTypeListByPage(map);
        PageInfo pageInfo = new PageInfo(blogTypeList);
        Map<String,Object> resultMap = new HashMap<>();

        if (blogTypeList.size() > 0) {
            resultMap.put("status", 200);
        } else {
            resultMap.put("status", 500);
        }

        resultMap.put("blogTypeList", blogTypeList);
        resultMap.put("pageInfo", pageInfo);;
        /** 把查询到的结果返回 */
        return resultMap;
    }

    /**
     * 查询博客所有的类别及数量
     */
    @RequestMapping("/selectBlogType")
    @ResponseBody
    public Map<String,Object> selectBlogType() {
        Map<String,Object> map = new HashMap<>();
        List<BlogType> blogTypeList = blogTypeService.selectBlogType();
        /** 查询成功 */
        if (blogTypeList.size() > 0) {
            map.put("status", 200);
        } else {
            map.put("status", 500);
        }
        map.put("blogTypeList", blogTypeList);

        return map;
    }

}
